home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.hitl.washington.edu
/
ftp.hitl.washington.edu.tar
/
ftp.hitl.washington.edu
/
pub
/
people
/
tsoper
/
CT Explorer
/
Scan.cs
< prev
next >
Wrap
Text File
|
2005-05-30
|
4KB
|
165 lines
using System;
using System.Windows.Forms;
using System.IO;
using System.ComponentModel;
using SampleGUI;
public class Scan
{
//Data Attributes
public string FilePath;
public ushort[,,] Data;
public int NumberDimensions;
public int[] DimensionSize;
public string DataType;
public float[] ElementSpacing;
public int Window;
public int Level;
//Index of where to display the scan
public int[] SliceIndex;
public Scan()
{
SliceIndex = new int[3];
Window = 700;
Level = 350;
}
public int Read()
{
string fileType = FilePath.Substring(FilePath.Length-3,3);
fileType = fileType.ToLower();
switch( fileType )
{
case "mhd":
return ReadInMhd();
default:
MessageBox.Show("Unknown file type","Error");
return -1;
}
}
private int ReadInMhd()
{
FileStream file = new FileStream(FilePath,FileMode.Open,
FileAccess.Read);
StreamReader sr = new StreamReader(file);
while(sr.Peek() > 0)
{
string lineStr = sr.ReadLine();
int equalSignIdx = lineStr.IndexOf("=",0);
string elementLStr = lineStr.Substring(0,equalSignIdx);
string elementRStr = lineStr.Substring(equalSignIdx + 1,
lineStr.Length - equalSignIdx - 1);
elementRStr = elementRStr.Trim();
switch(elementLStr.Trim().ToLower())
{
case "objecttype":
if(!elementRStr.Trim().ToLower().Equals("image"))
{
MessageBox.Show("Object must be an image","Error");
return -1;
}
break;
case "ndims":
NumberDimensions = Convert.ToInt32(
elementRStr);
DimensionSize = new int[NumberDimensions];
ElementSpacing = new float[NumberDimensions];
if(!NumberDimensions.Equals(3))
{
MessageBox.Show(
"Image must contain 3 dimensions","Error");
return -1;
}
break;
case "dimsize":
for(int ii = 0; ii < NumberDimensions; ii++)
{
string subStr;
//parse dimnesion size text at white spaces
if( ii < (NumberDimensions-1))
{
int spaceIdx = elementRStr.IndexOf(" ");
subStr = elementRStr.Substring(
0,spaceIdx);
elementRStr = elementRStr.Substring(
spaceIdx + 1);
}
else
subStr = elementRStr;
DimensionSize[ii] = Convert.ToInt32(subStr);
}
break;
case "elementtype":
DataType = elementRStr;
break;
case "elementspacing":
for(int ii = 0; ii < NumberDimensions; ii++)
{
string subStr;
if( ii < (NumberDimensions-1))
{
int spaceIdx = elementRStr.IndexOf(" ");
subStr = elementRStr.Substring(
0,spaceIdx);
elementRStr = elementRStr.Substring(
spaceIdx + 1);
}
else
subStr = elementRStr;
ElementSpacing[ii] = Convert.ToSingle(subStr);
}
break;
case "elementdatafile":
FilePath = elementRStr;
if(!File.Exists(FilePath))
{
MessageBox.Show(
"Cannot find source data file");
return -1;
}
break;
default:
break;
}//switch
} //while
Data = new ushort[DimensionSize[0],DimensionSize[1],
DimensionSize[2]];
sr.Close();
file.Close();
return ReadInRaw();
}//ReadInMhd
private int ReadInRaw()
{
FileStream file = new FileStream(FilePath,FileMode.Open,
FileAccess.Read);
BinaryReader br = new BinaryReader(file);
//don't know how to read in any other way than this
for(int iii = 0; iii < DimensionSize[2]; iii++)
{
for(int ii = 0; ii < DimensionSize[1]; ii++)
{
for(int i = 0; i < DimensionSize[0]; i++)
{
Data[i,ii,iii] = br.ReadUInt16();
}//for
}//for
}//for
return 0;
}//ReadInRaw
}